﻿#Использовать asserts

///////////////////////////////////////////////////////////////////////
// Тест класса ФиксированныйМассив
///////////////////////////////////////////////////////////////////////

Перем юТест;

////////////////////////////////////////////////////////////////////
// Программный интерфейс

Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
	
	юТест = ЮнитТестирование;
	
	ВсеТесты = Новый Массив;
	
	ВсеТесты.Добавить("ТестДолжен_СоздатьФиксированныйМассивПоМассиву");
	ВсеТесты.Добавить("ТестДолжен_СоздатьМассивПоФиксированномуМассиву");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьНеизменностьФиксированногоМассива");
	ВсеТесты.Добавить("ТестДолжен_ПроверитьОтсутствиеНенужныхМетодов");
	
	Возврат ВсеТесты;
	
КонецФункции

Процедура ТестДолжен_СоздатьМассивПоФиксированномуМассиву() Экспорт

	Массив = Новый Массив;
	юТест.ПодробныеОписанияОшибок(Истина);
	Количество = 10;
	
	Пока Количество > 0 Цикл
		Массив.Добавить(Количество);
		Количество = Количество - 1;
	КонецЦикла;
	
	ФиксированныйМассив = Новый ФиксированныйМассив(Массив);
	
	НовыйМассив = Новый Массив(ФиксированныйМассив);

	Ожидаем.Что(ТипЗнч(НовыйМассив)).Равно(Тип("Массив"));
	Ожидаем.Что(НовыйМассив.Количество(), "количество элементов исходной и полученной структуры совпадут").Равно(Массив.Количество());
	Ожидаем.Что(НовыйМассив.ВГраница(), "верхние границы массивов совпадут").Равно(Массив.ВГраница());
	
	Для Инд = 0 По НовыйМассив.ВГраница() Цикл
		Ожидаем.Что(НовыйМассив[Инд], "каждый элемент массив совпадает").Равно(Массив[Инд]);
	КонецЦикла;
	
КонецПроцедуры

Процедура ТестДолжен_СоздатьФиксированныйМассивПоМассиву() Экспорт

	Массив = Новый Массив;
	
	Количество = 10;
	
	Пока Количество > 0 Цикл
		Массив.Добавить(Количество);
		Количество = Количество - 1;
	КонецЦикла;
	
	ФиксированныйМассив = Новый ФиксированныйМассив(Массив);
	
	Ожидаем.Что(ТипЗнч(ФиксированныйМассив)).Равно(Тип("ФиксированныйМассив"));
	Ожидаем.Что(ФиксированныйМассив.Количество(), "количество элементов исходной и полученной структуры совпадут").Равно(Массив.Количество());
	Ожидаем.Что(ФиксированныйМассив.ВГраница(), "верхние границы массивов совпадут").Равно(Массив.ВГраница());
	
	Для Инд = 0 По ФиксированныйМассив.ВГраница() Цикл
		Ожидаем.Что(ФиксированныйМассив[Инд], "каждый элемент массив совпадает").Равно(Массив[Инд]);
	КонецЦикла;
	
КонецПроцедуры

Процедура ТестДолжен_ПроверитьНеизменностьФиксированногоМассива() Экспорт

	Массив = Новый Массив;
	
	Количество = 10;
	
	Пока Количество > 0 Цикл
		Массив.Добавить(Количество);
		Количество = Количество - 1;
	КонецЦикла;
	
	ФиксированныйМассив = Новый ФиксированныйМассив(Массив);
	
	Массив[0] = 0;
	Ожидаем.Что(ФиксированныйМассив[0], "не изменился элемент массива").Равно(10);
	
	Массив.Очистить();
	Ожидаем.Что(ФиксированныйМассив.Количество(), "не изменился размер массива").Равно(10);
	
	Попытка
		ФиксированныйМассив[0] = 5;
	Исключение
		Ожидаем.Что(ФиксированныйМассив[0], "не изменился элемент массива").Равно(10);
		Если Не ИнформацияОбОшибке().Описание = "Индексированное значение доступно только для чтения" Тогда
			ВызватьИсключение;
		КонецЕсли;
		Возврат;
	КонецПопытки;
	
	ВызватьИсключение "Значение в фиксированный массив было установлено";
	
КонецПроцедуры

Процедура ТестДолжен_ПроверитьОтсутствиеНенужныхМетодов() Экспорт

	ФиксированныйМассив = Новый ФиксированныйМассив(Новый Массив);
	
	Попытка
		
		ФиксированныйМассив.Добавить(0);
		Обнаружен = Истина;
		
	Исключение
		Обнаружен = Ложь;
	КонецПопытки;
	
	Если Обнаружен Тогда
		ВызватьИсключение "Обнаружен метод Добавить!";
	КонецЕсли;

	Попытка
		
		ФиксированныйМассив.Вставить(0, 0);
		Обнаружен = Истина;
		
	Исключение
		Обнаружен = Ложь;
	КонецПопытки;
	
	Если Обнаружен Тогда
		ВызватьИсключение "Обнаружен метод Вставить!";
	КонецЕсли;

	Попытка
		
		ФиксированныйМассив.Удалить(0);
		Обнаружен = Истина;
		
	Исключение
		Обнаружен = Ложь;
	КонецПопытки;

	Если Обнаружен Тогда
		ВызватьИсключение "Обнаружен метод Удалить!";
	КонецЕсли;
		
	Попытка
		
		ФиксированныйМассив.Очистить();
		Обнаружен = Истина;
		
	Исключение
		Обнаружен = Ложь;
	КонецПопытки;

	Если Обнаружен Тогда
		ВызватьИсключение "Обнаружен метод Очистить!";
	КонецЕсли;
		
КонецПроцедуры
